package corrida.lista;

public class ThreadLista implements Runnable {

	// Modificado -----------------------------
	private No first;
	private int contadorLista;

	public ThreadLista() {
		first = null;
		contadorLista = 0;	
	}
	// Fim Modificado -------------------------

	@Override
	public void run() {

//		No atual = anterior.getNext();
//		while (atual != null) {
//			System.out.println(atual.getValor());
//			atual = atual.getNext();
//		}
		
		
		// Comentado ------------------------------------------------
//		int i,j;
//		String temp = "";
//		No atual = anterior.getNext();
//		String a = atual.getValor();
//		String b = null;
//		
//		for(i = 1; i <= contadorLista; i++){
//			for (j = 1; j <= i; j++) {
//				if(atual.getNext() != null){
//					atual = atual.getNext();
//					b =  atual.getValor();
//					if(a.compareToIgnoreCase(b) < 0){
//						temp = a;
//						a = b;
//						b = temp;
//					}
//				}
//			}
//			System.out.println(b);
//		}
		
		listar();
		
		// Inserido -----------------------------------		
		if (first != null && first.getNext() != null)
		{
			// Troca se o primeiro da Lista for maior que o segundo
			if (first.getValor().compareToIgnoreCase(first.getNext().getValor()) > 0)
			{
				No temp = first;
				first = first.getNext();
				temp.setNext(first.getNext());
				first.setNext(temp);
			}
			
			// Troca o restante dos Itens da Lista	
			for (int i = 1; i < getContadorLista(); i++)
			{
				No ant = first;
				No pos = first.getNext();	
				
				while (ant != null && pos != null)
				{
					if (pos.getNext() != null) {
						if (pos.getValor().compareToIgnoreCase(pos.getNext().getValor()) > 0){
							ant.setNext(pos.getNext());
							pos.setNext(ant.getNext().getNext());
							ant.getNext().setNext(pos);
									
							ant = ant.getNext();
						}
						else {
							pos = pos.getNext();
							ant = ant.getNext();
						}
					}
					else {
						pos = pos.getNext();
						ant = ant.getNext();
					}
				}
			}
		}
				
		listar();
				
		//Fim Inserido -----------------------------------
		
		
		//insertSort();
	}

	public int getContadorLista() {
		return contadorLista;
	}

	public void setContadorLista(int contadorLista) {
		this.contadorLista = contadorLista;
	}

//	public void add(String valor) {
//		No temp = new No(valor);
//		No atual = anterior;
//		while (atual.getNext() != null) {
//			atual = atual.getNext();
//		}
//		atual.setNext(temp);
//		contadorLista++;
//	}
	
	public void add(String valor) {
		
		No temp = new No(valor);
		No atual = first;
		
		if (first == null)
			first = temp;
		else {
			while (atual.getNext() != null) {
				atual = atual.getNext();
			}
			
			atual.setNext(temp);			
		}
		
		contadorLista++;
	}
	
	
	
	public void insertSort() {
		// Cria uma nova lista
		No atual = first.getNext();
		ThreadLista novaLista = new ThreadLista();
		for (int x = 1; x < contadorLista; x++) {
			int y = x;
			String maior = atual.getNext().getValor();
			System.out.println("Y" + y);
			System.out.println("Com" + atual.getValor().compareToIgnoreCase(maior));
			while ((y>0)&& (atual.getValor().compareToIgnoreCase(maior)>0)){
				atual = first;
				y--;		
			}
			atual.setValor(maior);
		}
	}
	
//	public void listar(){
//		No atual = anterior.getNext();
//		while (atual!=null){
//			System.out.println(atual.getValor());
//			atual = atual.getNext();
//		}
//	}
	
	public void listar(){
		System.out.println("Qtd Nos Lista = " + this.getContadorLista());
		No atual = first;
		while (atual!=null){
			System.out.println(atual.getValor());
			atual = atual.getNext();
		}
	}

	/*
	 * public ThreadLista insertSort(){ System.out.println(anterior.getValor());
	 * int i,j; ThreadLista lista = new ThreadLista(); for (i = 0; i <
	 * contadorLista; i++) { No temp = anterior; No atual = anterior.getNext();
	 * j = i; while (j > 0 &&
	 * temp.getValor().compareToIgnoreCase(atual.getValor()) > 1) {
	 * 
	 * lista.add(temp.getValor()); } temp = atual.getNext(); } return lista; }
	 */
	//
	// public ThreadLista insertSort(){
	//
	// No atual = anterior.getNext();
	// while(atual != null){
	// System.out.println(atual.getValor());
	// atual = atual.getNext();
	// }
	//
	// int i,j;
	// ThreadLista lista = new ThreadLista();
	// for (i = 0; i < contadorLista; i++) {
	// No temp = anterior;
	// No atual = anterior.getNext();
	// j = i;
	// while (j > 0 && temp.getValor().compareToIgnoreCase(atual.getValor()) >
	// 1) {
	//
	// lista.add(temp.getValor());
	// }
	// temp = atual.getNext();
	// }
	// return lista;
	// }

}

